/** @format */

import { observe } from './observer/index.js';

export function initState(vm) {
  const opts = vm.$options;
  // vue的数据来源 属性 方法 数据 计算属性 watch
  opts.props && initProps(vm);

  opts.methods && initMethod(vm);

  opts.data && initData(vm);

  opts.computed && initComputed(vm);

  opts.watch && initWatch(vm);
}

function initProps() {}
function initMethod() {}
function initData(vm) {
  let data = vm.$options.data;
  // vm._data 让用户能够获取到对应的数据
  data = vm._data = typeof data === 'function' ? data.call(vm) : data;
  // 对象劫持，用户改变了数据，我希望可以得到通知 => 刷新页面
  // MVVM 模式，数据变化可以驱视图变化

  //  给属性增加get和set方法
  observe(data); // 响应式原理
}
function initComputed() {}
function initWatch() {}
